#include "ShmCommt.h"

// Server任务: 创建共享内存、连接共享内存、读取内存内容、断开内存映射、释放共享内存、退出进程  
int main()
{
    // 生成唯一键key，去创建和连接共享内存  
    key_t id = ftok(SHM_PATH, PROJ_ID);
    if (id < 0)
    {
        perror("ftok error: ");
        return 1;
    }

    // 创建共享内存
    int shmFd = shmget(id, SHMSIZE, IPC_CREAT | IPC_EXCL | 0666);  // IPC_CREAT | IPC_EXCL | 0666
    if (shmFd < 0)
    {
        perror("shmget error: ");
        return 2;
    }


    // 连接共享内存
    char* buffer = (char*)shmat(shmFd, nullptr, 0);
    if (*((int*)buffer) == -1)
    {
        perror("shmat error: ");
        return 3;
    }

    // 服务端开始读取
    while (true)
    {
        char* tmp = buffer;
        if (strcmp(tmp, "quit") == 0) break;
        std::cout << "client echo> " << tmp << std::endl;
        sleep(1);
    }

    // 结束 服务端断开共享内存连接
    if (0 > shmdt(buffer))
    {
        perror("buffer error: ");
        return 4;
    }

    // 服务端释放共享内存
    if (0 > shmctl(shmFd, IPC_RMID, nullptr))
    {
        perror("shmctl error: ");
        return 5;
    }

    // 结束本次服务  
    return 0;
}